const Koa = require('koa')
const app = new Koa()
const { koaBody } = require('koa-body');
const json = require('koa-json')
const onerror = require('koa-onerror')
const logger = require('koa-logger')
// const bodyParser = require('koa-bodyparser');
const index = require('./routes/index')
const users = require('./routes/users')
const dataOp=require('./routes/dataOp')
const jwt = require('jsonwebtoken')
const jwtKoa = require('koa-jwt')
const util = require('util')
const verify = util.promisify(jwt.verify) 
const secret = 'test'
// error handler
app.use(require('koa-static')(__dirname + '/public'))
app.use(jwtKoa({secret}).unless({
  path: [/^\/users\/login/,/^\/users\/logon/,/^\/searchDimFood/,/^\/searchKindDimFood/,/^\/searchFood/]
}))

app.use(
  koaBody({
      multipart: true,    //解析多个文件
      formidable: {
          maxFileSize: 100 * 1024 * 1024,    // 设置上传文件大小最大限制，默认2M
          //uploadDir: 可以填写一个路径，不填写默认为 os.tmpDir()
      }
  })
)
// request.method可以获取请求方法。
// get，post或者其他类型(request对象被封在ctx内，所以也可以ctx.method获取)
// app.use(async (ctx) => {
//     if (ctx.url === '/' && ctx.method === 'POST') {
//         ctx.body = ctx.request.body
//     } else {
//         // 其他请求显示404
//         ctx.body = '<h1>404!</h1>'
//     }
// })

// middlewares
// app.use(bodyparser({
//   enableTypes:['json', 'form', 'text']
// }))
app.use(json())
app.use(logger())


// logger
// app.use(async (ctx, next) => {
//   const start = new Date()
//   await next()
//   const ms = new Date() - start
//   console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
// })

// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())
app.use(dataOp.routes(), dataOp.allowedMethods())

onerror(app)
//将cors挂载
const cors = require('koa2-cors');// 配置中间件

// 实例化koa 之后的代码如下：
app.use(cors({
  origin: function (ctx) {
    // 允许所有来源访问
    return '*';
  },
  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization','Access-Control-Allow-Origin'],
  maxAge: 5,
  credentials: true,
  allowMethods: ['GET', 'POST', 'DELETE'],
  allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}));

// 添加中间件处理逻辑
app.use(async (ctx, next) => {
  // 处理请求逻辑
});



// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app
